// Package main 实现了一个RPC服务器，用于演示Go原生RPC的使用
package main

import (
	"fmt"
	"net"
	"net/http"
	"net/rpc"
)

// Server 定义RPC服务结构体
type Server struct {
}

// Req 定义RPC请求参数结构体
type Req struct {
	Num1 int // 第一个加数
	Num2 int // 第二个加数
}

// Res 定义RPC响应结果结构体
type Res struct {
	Num int // 计算结果
}

// Add 定义加法运算的RPC方法
// 参数:
//   - req: 包含两个整数的请求结构体
//   - res: 用于存储计算结果的响应结构体指针
//
// 返回值:
//   - error: 错误信息，nil表示无错误
func (s Server) Add(req Req, res *Res) error {
	// 执行加法运算
	res.Num = req.Num1 + req.Num2
	// 打印请求信息到控制台
	fmt.Println("请求来了", req)
	return nil
}

// main 函数是程序的入口点，负责启动RPC服务器
func main() {
	// 注册RPC服务，使Server结构体的方法可以通过RPC调用
	rpc.Register(new(Server))

	// 设置RPC处理器，使用HTTP协议处理RPC请求
	rpc.HandleHTTP()

	// 创建TCP监听器，监听8000端口
	listen, err := net.Listen("tcp", ":8000")
	if err != nil {
		// 如果监听失败，打印错误信息并退出程序
		fmt.Println("监听失败:", err)
		return
	}

	// 启动HTTP服务，处理来自listen的连接请求
	// nil表示使用默认的多路复用器
	http.Serve(listen, nil)
}
